FB a tabulka historie zmien

Otázka od: hlas

14. 8. 2004 17:38

Chcem urobit tabulku, v ktorej budu zapisovane zaznamy
obsahujuce historiu zmien(inserty, updaty alebo delete) v ostatnych tabulkach
danej databazy.

Urobit to na klientovi asi viem. Skor ma zaujima ci sa to
da nejako jednoducho urobit aj na strane servera.

Moja predstava je ze by existovala tabulka HISTORY
s polami USER, DATUM, CAS, TABULKA, CISLO, DRUH ZMENY,POLE.

USER - cislo uzivatela
DATUM - datum zmeny akehokolvek zaznamu v akejkolvek tabulke
CAS - cas zmeny
TABULKA - nazov tabulky v ktorej sa zmena diala
CISLO - primarny kluc zaznamu, ktory sa menil alebo pridaval
DRUH ZMENY - ci sa jedna o insert alebo update alebo delete
POLE - ak sa jedna o update ake pole sa menilo

a teraz by som nad ostatnymi tabulkami napisal triggre.
afterinsert - ten by do tabulky history urobil zaznam o novom zazname v inej
tabulke
afterdelete - podobne
afterupdate - to je uz horsie. viem si len predstavit dlhy trigger
                   kde bude
                   if new.pole1<>old.pole1 then insert into history ......
                   if new.pole2<>old.pole2 then insert into history ......
                   if new.pole3<>old.pole3 then insert into history ......
atd...
tie triggre after insert vyzeraju velmi pracne
neda sa tam napisat nejaky cyklus co by behal po poliach
tabulky? ako zistim v triggry napr. pocet poli danej tabulky?
da sa v triggry odvolavat na polia systemom fields[0], fields[1] atd
alebo nejako podobne?

Odpovedá: hlas

14. 8. 2004 18:24

problemove vidim samozrejme triggre after update
nie after insert - to bol preklep


Odpovedá: Roland Turcan

16. 8. 2004 0:53

<<< 16.8.2004 1:44 - hlas "hlas@inmail.sk" >>>
h> Chcem urobit tabulku, v ktorej budu zapisovane zaznamy
h> obsahujuce historiu zmien(inserty, updaty alebo delete) v
h> ostatnych tabulkach danej databazy.

h> Urobit to na klientovi asi viem. Skor ma zaujima ci sa to
h> da nejako jednoducho urobit aj na strane servera.

h> Moja predstava je ze by existovala tabulka HISTORY
h> s polami USER, DATUM, CAS, TABULKA, CISLO, DRUH ZMENY,POLE.

h> USER - cislo uzivatela
h> DATUM - datum zmeny akehokolvek zaznamu v akejkolvek tabulke
h> CAS - cas zmeny
h> TABULKA - nazov tabulky v ktorej sa zmena diala
h> CISLO - primarny kluc zaznamu, ktory sa menil alebo pridaval
h> DRUH ZMENY - ci sa jedna o insert alebo update alebo delete
h> POLE - ak sa jedna o update ake pole sa menilo

h> a teraz by som nad ostatnymi tabulkami napisal triggre.
h> afterinsert - ten by do tabulky history urobil zaznam o novom zazname v inej
tabulke
h> afterdelete - podobne
h> afterupdate - to je uz horsie. viem si len predstavit dlhy trigger
h> kde bude
h> if new.pole1<>old.pole1 then insert into history ......
h> if new.pole2<>old.pole2 then insert into history ......
h> if new.pole3<>old.pole3 then insert into history ......
h> atd...
h> tie triggre after insert vyzeraju velmi pracne
h> neda sa tam napisat nejaky cyklus co by behal po poliach
h> tabulky? ako zistim v triggry napr. pocet poli danej tabulky?
h> da sa v triggry odvolavat na polia systemom fields[0], fields[1] atd
h> alebo nejako podobne?


Nie je mi jasne co by si tym chcel sledovat, ci len to ci bola zmena,
ale bo ta zaujimaju aj data ktore sa zmenili.

1. Iba v ktorom stlpci
Tak toto asi inak neobides, oby tak ako si popisal.

2. Aj data zmenene
   - zapisuj si ze bola zmena do tej tabulky HISTORY
   - vytvor k tabulke TABLE tabulku TABLE_BACKUP s rovnakou strukturou
     ale bez indexov, daj si iba PK.
   - daj do "after update" a "before delete"
     INSERT INTO TABLE_BACKUP SELECT * FROM TABLE; pisem z hlavy

?

--
Best regards, TRoland
http://www.rotursoft.sk
http://exekutor.rotursoft.sk


Odpovedá: hlas

16. 8. 2004 7:43

Zmyslom je vidiet ktore pole naposledy, kto editoval.
hodnoty tych poli zaznamenavat nepotrebujem


>
>
> Nie je mi jasne co by si tym chcel sledovat, ci len to ci bola zmena,
> ale bo ta zaujimaju aj data ktore sa zmenili.
>
> 1. Iba v ktorom stlpci
> Tak toto asi inak neobides, oby tak ako si popisal.
>
> 2. Aj data zmenene
> - zapisuj si ze bola zmena do tej tabulky HISTORY
> - vytvor k tabulke TABLE tabulku TABLE_BACKUP s rovnakou strukturou
> ale bez indexov, daj si iba PK.
> - daj do "after update" a "before delete"
> INSERT INTO TABLE_BACKUP SELECT * FROM TABLE; pisem z hlavy
>